<script>
  // 1. 计算阶乘
  // 题目：实现 factorial(n)，计算 n 的阶乘
  // 示例：factorial(5) → 120 (5×4×3×2×1)
  //   function factorial(n) {
  //     if (n === 1) {
  //       return 1;
  //     }
  //     return n * factorial(n - 1);
  //   }
  //   console.log(factorial(5));

  //   2. 斐波那契数列 f(2) = f(1) + f(0)
  // 题目：实现 fibonacci(n)，返回第 n 个斐波那契数
  // 示例：fibonacci(6) → 8 (序列：0, 1, 1, 2, 3, 5, 8, 13...)

  //   function fibonacci(n) {
  //     if (n === 0) {
  //       return 0;
  //     }
  //     if (n === 1) {
  //       return 1;
  //     }
  //     return fibonacci(n - 1) + fibonacci(n - 2);
  //   }
  //   console.log(fibonacci(6));

  //   3. 数组求和 f(0) = arr[0] + f(1);
  // 题目：实现 sumArray(arr)，递归计算数组所有元素的和
  // 示例：sumArray([1, 2, 3, 4, 5]) → 15
  //   function sumArray(arr) {
  //     let result;
  //     function f(num) {
  //       if (num >= arr.length) {
  //         return 0;
  //       }
  //       return arr[num] + f(num + 1);
  //     }
  //     result = f(0);
  //     return result;
  //   }
  //   console.log(sumArray([1, 2, 3, 4, 5]));

  //   function sumArray(arr) {
  //     if (arr.length === 0) {
  //       return 0;
  //     }
  //     return arr[0] + sumArray(arr.slice(1));
  //   }
  //   console.log(sumArray([1, 2, 3]));

  //   4. 数组最大值
  // 题目：实现 findMax(arr)，递归找出数组中的最大值
  // 示例：findMax([3, 1, 4, 1, 5, 9]) → 9
  //   function findMax(arr) {
  //     // 数组长度为1时，返回该元素
  //     if (arr.length === 1) {
  //       return arr[0];
  //     }
  //     // 递归关系：比较第一个元素和剩余元素的最大值
  //     let max = 0;
  //     if (arr[0] > findMax(arr.slice(1))) {
  //       max = arr[0];
  //     } else {
  //       max = findMax(arr.slice(1));
  //     }
  //     return max;
  //   }
  //   console.log(findMax([1, 2]));

  // 第一次比较：1 > findMax(2);
  // 第二次比较：算出findMax(2) ==> 2
  // 最后再看 1 > findMax(2)===2 1 > 2 ? 1: 2===findMax(arr.slice(1))

  //   5. 数组包含判断
  // 题目：实现 contains(arr, target)，递归判断数组是否包含目标元素
  // 示例：contains([1, 2, 3, 4], 3) → true

  //   function contains(arr, target) {
  //     if (arr.length === 0) return false;
  //     if (arr[0] === target) return true;
  //     // 一个一个提取把数组的每一项提取出来，跟目标值作比对
  //     return contains(arr.slice(1), target);
  //   }
  //   console.log(contains([1, 2], 2));

  //   6. 数组反转
  // 题目：实现 reverseArray(arr)，递归反转数组
  // 示例：reverseArray([1, 2, 3, 4]) → [4, 3, 2, 1]
  //   function reverseArray(arr) {
  //     if (arr.length <= 1) return arr;
  //     const first = arr[0];
  //     const rest = arr.slice(1);
  //     return [...reverseArray(rest), first];
  //   }
  //   console.log(reverseArray([1, 2]));

  // 7. 字符串反转
  // 题目：实现 reverseString(str)，递归反转字符串
  // 示例：reverseString("hello") → "olleh"
  //   function reverseString(str) {
  //     if (str.length <= 1) return str;
  //     const firstStr = str.charAt(0);
  //     const rest = str.substring(1);
  //     return reverseString(rest) + firstStr;
  //   }
  //   console.log(reverseString('hello'));

  //   8. 判断回文
  // 题目：实现 isPalindrome(str)，递归判断字符串是否为回文
  // 示例：isPalindrome("racecar") → true
  //   function isPalindrome(str) {
  //     if (str.length <= 1) return true;
  //     if (str[0] !== str[str.length - 1]) return false;
  // 取中间的值比对
  //     return isPalindrome(str.slice(1, -1));
  //   }
  //   console.log(isPalindrome('laeal'));

  //   isPalindrome("racecar")
  // │
  // ├─ 检查首尾: 'r' == 'r' ✅
  // ├─ 取中间: "racecar".slice(1, -1) → "aceca"
  // ├─ 递归调用: isPalindrome("aceca")
  // │  ├─ 检查首尾: 'a' == 'a' ✅
  // │  ├─ 取中间: "aceca".slice(1, -1) → "cec"
  // │  ├─ 递归调用: isPalindrome("cec")
  // │  │  ├─ 检查首尾: 'c' == 'c' ✅
  // │  │  ├─ 取中间: "cec".slice(1, -1) → "e"
  // │  │  ├─ 递归调用: isPalindrome("e")
  // │  │  │  └─ 长度=1 → 返回 true ✅
  // │  │  └─ 返回 true
  // │  └─ 返回 true
  // └─ 返回 true

  //   9. 数组扁平化
  // 题目：实现 flatten(arr)，递归展开所有嵌套数组
  // 示例：flatten([1, [2, [3, [4]]], 5]) → [1, 2, 3, 4, 5]
  //   function flatten(arr) {
  //     // 空数组返回
  //     if (arr.length === 0) {
  //       return [];
  //     }
  //     // 取出第一个元素
  //     const first = arr[0];
  //     // 获取剩余的元素
  //     const rest = arr.slice(1);
  //     if (Array.isArray(arr[0])) {
  //       return [...flatten(first), ...flatten(rest)];
  //     } else {
  //       return [first, ...flatten(rest)];
  //     }
  //   }

  //   function flatten(arr) {
  //     let result = [];
  //     if (arr.length === 0) {
  //       return [];
  //     }
  //     for (const item of arr) {
  //       if (Array.isArray(item)) {
  //         // result = result.concat(flatten(item));
  //         result.push(...flatten(item));
  //       } else {
  //         result.push(item);
  //       }
  //     }
  //     return result;
  //   }
  //   console.log(flatten([1, [2, [3, [4]]], 5]));
</script>
